import { defineConfig, loadEnv } from 'vite';
import path from 'path';
import { dependencies } from './package.json';
import autoprefixer from 'autoprefixer';
import createPlugins from './vite/plugins';

export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, process.cwd());
  const { VITE_ENV } = env;
  console.log('当前环境：', VITE_ENV);
  return {
    resolve: {
      alias: {
        '@': path.resolve(__dirname, './src'),
        '*': path.resolve(''),
        vue: 'vue/dist/vue.esm.js',
      },
    },
    plugins: createPlugins(env),
    server: {
      host: '0.0.0.0',
      open: true, // 服务启动时是否自动打开浏览器
    },

    build: {
      brotliSize: false, // 设置为false将禁用构建的brotli压缩大小报告。可以稍微提高构建速度
      minify: true, // 开启压缩
      rollupOptions: {
        treeshake: true, // 开启 Tree Shaking，消除未使用的代码，减小最终的包大小
        output: {
          // 根据不同的js库 拆分包，减少index.js包体积
          manualChunks(id) {
            if (id.includes('node_modules')) {
              // 指定需要拆分的第三方库或模块
              // console.info("id", id);
              const dependenciesKeys = Object.keys(dependencies);
              const match = dependenciesKeys.find((item) => {
                return id.includes(item);
              });
              // console.info("match", match);
              const notSplit = ['vue', 'ant-design-vue'];
              if (match && !notSplit.includes(match)) {
                return match;
              }
            }
          },
        },
        commonjsOptions: {
          requireReturnsDefault: 'namespace', // 要求ES模块返回其名称空
        },
      },
    },

    // autoprefixer 自动添加浏览器前缀
    css: {
      postcss: {
        plugins: [
          autoprefixer({
            overrideBrowserslist: ['> 0.5%', 'last 2 versions'], // 根据实际需求设置
          }),
        ],
      },
    },

    // vite 打包后 iconFont 线上偶发性content乱码
    esbuild: {
      charset: 'ascii',
    },
  };
});
